{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\u001b[32m2024-08-02 17:47:32.204\u001b[0m | \u001b[1mINFO    \u001b[0m | \u001b[36mbyzerllm.utils.connect_ray\u001b[0m:\u001b[36mconnect_cluster\u001b[0m:\u001b[36m48\u001b[0m - \u001b[1mJDK 21 will be used (/Users/allwefantasy/.auto-coder/jdk-21.0.2.jdk/Contents/Home)...\u001b[0m\n",
      "2024-08-02 17:47:32,259\tINFO worker.py:1564 -- Connecting to existing Ray cluster at address: 127.0.0.1:6379...\n",
      "2024-08-02 17:47:32,274\tINFO worker.py:1740 -- Connected to Ray cluster. View the dashboard at \u001b[1m\u001b[32m127.0.0.1:8265 \u001b[39m\u001b[22m\n",
      "\u001b[32m2024-08-02 17:47:32.295\u001b[0m | \u001b[1mINFO    \u001b[0m | \u001b[36mbyzerllm.apps.byzer_storage.train_sft\u001b[0m:\u001b[36mto_qa_pairs\u001b[0m:\u001b[36m48\u001b[0m - \u001b[1mStarting to generate QA pairs for text: 祝威廉生日2月1号...\u001b[0m\n",
      "\u001b[32m2024-08-02 17:47:32.296\u001b[0m | \u001b[1mINFO    \u001b[0m | \u001b[36mbyzerllm.apps.byzer_storage.train_sft\u001b[0m:\u001b[36mto_qa_pairs\u001b[0m:\u001b[36m50\u001b[0m - \u001b[1mGenerating initial QA pairs...\u001b[0m\n",
      "\u001b[32m2024-08-02 17:48:06.865\u001b[0m | \u001b[1mINFO    \u001b[0m | \u001b[36mbyzerllm.apps.byzer_storage.train_sft\u001b[0m:\u001b[36mto_qa_pairs\u001b[0m:\u001b[36m52\u001b[0m - \u001b[1mInitial QA pairs generated. Length: 1111\u001b[0m\n",
      "\u001b[32m2024-08-02 17:48:06.867\u001b[0m | \u001b[1mINFO    \u001b[0m | \u001b[36mbyzerllm.apps.byzer_storage.train_sft\u001b[0m:\u001b[36mto_qa_pairs\u001b[0m:\u001b[36m57\u001b[0m - \u001b[1mWill generate additional QA pairs for 2 turns\u001b[0m\n",
      "\u001b[32m2024-08-02 17:48:06.867\u001b[0m | \u001b[1mINFO    \u001b[0m | \u001b[36mbyzerllm.apps.byzer_storage.train_sft\u001b[0m:\u001b[36mto_qa_pairs\u001b[0m:\u001b[36m62\u001b[0m - \u001b[1mGenerating additional QA pairs (turn 1/2)...\u001b[0m\n",
      "\u001b[32m2024-08-02 17:48:47.707\u001b[0m | \u001b[1mINFO    \u001b[0m | \u001b[36mbyzerllm.apps.byzer_storage.train_sft\u001b[0m:\u001b[36mto_qa_pairs\u001b[0m:\u001b[36m65\u001b[0m - \u001b[1mAdditional QA pairs generated. New total length: 2392\u001b[0m\n",
      "\u001b[32m2024-08-02 17:48:47.708\u001b[0m | \u001b[1mINFO    \u001b[0m | \u001b[36mbyzerllm.apps.byzer_storage.train_sft\u001b[0m:\u001b[36mto_qa_pairs\u001b[0m:\u001b[36m62\u001b[0m - \u001b[1mGenerating additional QA pairs (turn 2/2)...\u001b[0m\n",
      "\u001b[32m2024-08-02 17:49:27.325\u001b[0m | \u001b[1mINFO    \u001b[0m | \u001b[36mbyzerllm.apps.byzer_storage.train_sft\u001b[0m:\u001b[36mto_qa_pairs\u001b[0m:\u001b[36m65\u001b[0m - \u001b[1mAdditional QA pairs generated. New total length: 3623\u001b[0m\n",
      "\u001b[32m2024-08-02 17:49:27.326\u001b[0m | \u001b[1mINFO    \u001b[0m | \u001b[36mbyzerllm.apps.byzer_storage.train_sft\u001b[0m:\u001b[36mto_qa_pairs\u001b[0m:\u001b[36m67\u001b[0m - \u001b[1mExtracting QA pairs from generated text...<_group_>\n",
      "<_question_>祝威廉的生日是哪一天？</_question_>\n",
      "<_answer_>祝威廉的生日是2月1号。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日在哪个季节？</_question_>\n",
      "<_answer_>祝威廉的生日在冬季。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日在2月的哪一天？</_question_>\n",
      "<_answer_>祝威廉的生日在2月的第1天。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在公历的2月？</_question_>\n",
      "<_answer_>是的，祝威廉的生日在公历的2月。</_answer_\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在中国的春节期间？</_question_>\n",
      "<_answer_>不一定，因为中国的春节日期每年不同，但通常在1月底到2月中旬之间。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在美国的情人节之后？</_question_>\n",
      "<_answer_>是的，因为美国的情人节是2月14日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在欧洲的圣烛节之后？</_question_>\n",
      "<_answer_>是的，因为欧洲的圣烛节是2月2日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在澳大利亚的国庆日之后？</_question_>\n",
      "<_answer_>是的，因为澳大利亚的国庆日是1月26日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在加拿大的家庭日之前？</_question_>\n",
      "<_answer_>是的，因为加拿大的家庭日通常在2月的第三个星期一，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在日本的建国纪念日之后？</_question_>\n",
      "<_answer_>是的，因为日本的建国纪念日是2月11日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_><_group_>\n",
      "<_question_>祝威廉的生日是否在中国的元宵节之前？</_question_>\n",
      "<_answer_>是的，因为中国的元宵节通常在农历正月十五，公历日期不固定，但通常在2月中旬或之后，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在美国的超级碗星期天之前？</_question_>\n",
      "<_answer_>是的，因为美国的超级碗通常在2月的第一个星期天举行，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在印度的共和国日之后？</_question_>\n",
      "<_answer_>是的，因为印度的共和国日是1月26日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在英国的 Burns Night 之后？</_question_>\n",
      "<_answer_>是的，因为英国的 Burns Night 是1月25日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在韩国的农历新年之后？</_question_>\n",
      "<_answer_>是的，因为韩国的农历新年日期每年不同，但通常在1月底到2月中旬之间，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在俄罗斯的祖国保卫者日之前？</_question_>\n",
      "<_answer_>是的，因为俄罗斯的祖国保卫者日是2月23日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在巴西的狂欢节之前？</_question_>\n",
      "<_answer_>是的，因为巴西的狂欢节日期每年不同，但通常在2月或3月，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在南非的人权日之后？</_question_>\n",
      "<_answer_>是的，因为南非的人权日是3月21日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在法国的巴士底日之前？</_question_>\n",
      "<_answer_>是的，因为法国的巴士底日是7月14日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在德国的统一日之前？</_question_>\n",
      "<_answer_>是的，因为德国的统一日是10月3日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_><_group_>\n",
      "<_question_>祝威廉的生日是否在泰国的国家艺术家日之后？</_question_>\n",
      "<_answer_>是的，因为泰国的国家艺术家日是1月20日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在墨西哥的宪法日之前？</_question_>\n",
      "<_answer_>是的，因为墨西哥的宪法日是2月5日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在埃及的警察节之后？</_question_>\n",
      "<_answer_>是的，因为埃及的警察节是1月25日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在澳大利亚的澳大利亚日之后？</_question_>\n",
      "<_answer_>是的，因为澳大利亚的澳大利亚日是1月26日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在加拿大的路易斯·里尔日之前？</_question_>\n",
      "<_answer_>是的，因为加拿大的路易斯·里尔日是3月10日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在印度的甘地诞辰纪念日之后？</_question_>\n",
      "<_answer_>是的，因为印度的甘地诞辰纪念日是10月2日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在英国的母亲节之前？</_question_>\n",
      "<_answer_>是的，因为英国的母亲节日期每年不同，但通常在3月，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在韩国的植树节之前？</_question_>\n",
      "<_answer_>是的，因为韩国的植树节是4月5日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在俄罗斯的国际妇女节之前？</_question_>\n",
      "<_answer_>是的，因为俄罗斯的国际妇女节是3月8日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\n",
      "\n",
      "<_group_>\n",
      "<_question_>祝威廉的生日是否在巴西的独立日之前？</_question_>\n",
      "<_answer_>是的，因为巴西的独立日是9月7日，而祝威廉的生日是2月1日。</_answer_>\n",
      "</_group_>\u001b[0m\n",
      "\u001b[32m2024-08-02 17:49:27.335\u001b[0m | \u001b[34m\u001b[1mDEBUG   \u001b[0m | \u001b[36mbyzerllm.apps.byzer_storage.train_sft\u001b[0m:\u001b[36mto_qa_pairs\u001b[0m:\u001b[36m80\u001b[0m - \u001b[34m\u001b[1mExtracted QA pair 1: Q: 祝威廉的生日是哪一天？... A: 祝威廉的生日是2月1号。...\u001b[0m\n",
      "\u001b[32m2024-08-02 17:49:27.336\u001b[0m | \u001b[34m\u001b[1mDEBUG   \u001b[0m | \u001b[36mbyzerllm.apps.byzer_storage.train_sft\u001b[0m:\u001b[36mto_qa_pairs\u001b[0m:\u001b[36m80\u001b[0m - \u001b[34m\u001b[1mExtracted QA pair 2: Q: 祝威廉的生日在哪个季节？... A: 祝威廉的生日在冬季。...\u001b[0m\n",
      "\u001b[32m2024-08-02 17:49:27.337\u001b[0m | \u001b[34m\u001b[1mDEBUG   \u001b[0m | \u001b[36mbyzerllm.apps.byzer_storage.train_sft\u001b[0m:\u001b[36mto_qa_pairs\u001b[0m:\u001b[36m80\u001b[0m - \u001b[34m\u001b[1mExtracted QA pair 3: Q: 祝威廉的生日在2月的哪一天？... A: 祝威廉的生日在2月的第1天。...\u001b[0m\n",
      "\u001b[32m2024-08-02 17:49:27.337\u001b[0m | \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mbyzerllm.apps.byzer_storage.train_sft\u001b[0m:\u001b[36mto_qa_pairs\u001b[0m:\u001b[36m84\u001b[0m - \u001b[33m\u001b[1mSkipping item 4 due to incorrect number of elements: 28\u001b[0m\n",
      "\u001b[32m2024-08-02 17:49:27.338\u001b[0m | \u001b[1mINFO    \u001b[0m | \u001b[36mbyzerllm.apps.byzer_storage.train_sft\u001b[0m:\u001b[36mto_qa_pairs\u001b[0m:\u001b[36m86\u001b[0m - \u001b[1mExtracted 3 valid QA pairs.\u001b[0m\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[QAPair(question='祝威廉的生日是哪一天？', answer='祝威廉的生日是2月1号。'),\n",
       " QAPair(question='祝威廉的生日在哪个季节？', answer='祝威廉的生日在冬季。'),\n",
       " QAPair(question='祝威廉的生日在2月的哪一天？', answer='祝威廉的生日在2月的第1天。')]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import byzerllm\n",
    "import json\n",
    "import base64\n",
    "from byzerllm.apps.byzer_storage.train_sft import to_qa_pairs\n",
    "llm = byzerllm.ByzerLLM.from_default_model(\"deepseek_chat\")\n",
    "\n",
    "to_qa_pairs(text=\"祝威廉生日2月1号\", llm=llm,num=20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import byzerllm\n",
    "import json\n",
    "import base64\n",
    "from byzerllm.apps.byzer_storage.train_sft import to_qa_pairs\n",
    "llm = byzerllm.ByzerLLM.from_default_model(\"deepseek_chat\")\n",
    "\n",
    "to_qa_pairs(text=\"祝威廉生日2月1号\", llm=llm,num=20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['/tmp/a.png', '/tmp/a2.png']\n",
      "[]\n"
     ]
    }
   ],
   "source": [
    "from byzerllm.utils.nontext import Image\n",
    "\n",
    "v = Image.extract_image_paths(\"\"\"<_image_>/tmp/a.png\n",
    "                          </_image_>哈哈哈哈<_image_>/tmp/a2.png\n",
    "                          </_image_>\"\"\")\n",
    "\n",
    "print(v)\n",
    "\n",
    "v = Image.extract_image_paths(\"\"\"哈哈哈哈\"\"\")\n",
    "\n",
    "print(v)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "byzerllm",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
